package pw.mcdarc.mc.bython.Nms.v1_10_R1.Chat;

import net.minecraft.server.v1_10_R1.*;

public class ChatMessageFactory {

    ChatMessage msg;
    ChatModifier modifier;

    /**
     * 构造函数
     * @param msg 消息的内容
     */
    public ChatMessageFactory(ChatMessage msg) {
        this.msg = msg;
        this.modifier = msg.getChatModifier();
    }

    /**
     * 获取ChatMessage
     * @return ChatMessage对象
     */
    public ChatMessage getMessage() {
        return this.msg;
    }

    /**
     * 添加ClickAble到Message中
     * @param action EnumClickAction枚举类型
     * @param todo 要执行的东西 比如命令啊
     */
    public void setClickable(ChatClickable.EnumClickAction action, String todo) {
        ChatClickable clickable = new ChatClickable(action, todo);
        modifier.setChatClickable(clickable);
    }

    /**
     * 添加Modifier到ChatMessage
     */
    public void setModifierToChatMessage() {
        msg.setChatModifier(modifier);
    }

    /**
     * 鼠标放到文字上事出现悬浮框
     * @param action 枚举EnumHoverAction
     * @param component ChatMessage.f()即可获得 显示在悬浮框的文字
     */
    public void setHoverable(ChatHoverable.EnumHoverAction action, IChatBaseComponent component) {
        ChatHoverable hoverable = new ChatHoverable(action, component);
    }

    /**
     * 设置文字颜色
     * @param color 枚举EnumChatFormat
     */
    public void setColor(EnumChatFormat color) {
        modifier.setColor(color);
    }

    /**
     * 获取ChatModifier
     * @return 实例
     */
    public ChatModifier getModifier() {
        return modifier;
    }

    /**
     * 设置是否为粗体
     * @param args 布尔值
     */
    public void setBold(boolean args) {
        modifier.setBold(args);
    }

    /**
     * 设置插入值
     * @param s 字符串
     */
    public void setInsertion(String s) {
        modifier.setInsertion(s);
    }

    /**
     * 设置是否斜体
     * @param bool 布尔值
     */
    public void setItalic(boolean bool) {
        modifier.setItalic(bool);
    }

    /**
     * 设置输入的字母要随机刷新= = 就是一大堆乱码
     * @param bool 布尔值
     */
    public void setRandom(boolean bool) {
        modifier.setRandom(bool);
    }

    /**
     * 设置是否有删除线
     * @param bool 布尔值
     */
    public void setStrikethrough(boolean bool) {
        modifier.setStrikethrough(bool);
    }

    /**
     * 设置下划线
     * @param bool 布尔值
     */
    public void setUnderline(boolean bool) {
        modifier.setUnderline(bool);
    }

    /**
     * 获取Clickable
     * @return ChatClickable
     */
    public ChatClickable getClickable() {
        return modifier.h();
    }

    /**
     * 获取Hoverable
     * @return ChatHoverable
     */
    public ChatHoverable getHoveralbe() {
        return modifier.i();
    }
}
